using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools._Configuration._LRSEvent
{
    /// <summary>
    /// <para>Enable Referent Fields</para>
    /// <para>Enables or modifies the referent fields so that you can  manage referent information for the registered LRS event.</para>
    /// <para>启用或修改参照字段，以便您可以管理已注册 LRS 事件的参照信息。</para>
    /// </summary>    
    [DisplayName("Enable Referent Fields")]
    public class EnableReferentFields : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public EnableReferentFields()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_class">
        /// <para>Event Feature Class</para>
        /// <para>The feature class that will be used for the LRS event.</para>
        /// <para>将用于 LRS 事件的要素类。</para>
        /// </param>
        public EnableReferentFields(object _in_feature_class)
        {
            this._in_feature_class = _in_feature_class;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Enable Referent Fields";

        public override string CallName => "locref.EnableReferentFields";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_feature_class, _from_referent_method_field, _from_referent_location_field, _from_referent_offset_field, _to_referent_method_field, _to_referent_location_field, _to_referent_offset_field, _offset_units.GetGPValue(), _out_feature_class];

        /// <summary>
        /// <para>Event Feature Class</para>
        /// <para>The feature class that will be used for the LRS event.</para>
        /// <para>将用于 LRS 事件的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Event Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_class { get; set; }


        /// <summary>
        /// <para>Referent Method Field</para>
        /// <para>The From referent method field.</para>
        /// <para>“从参照方法”字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Referent Method Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _from_referent_method_field { get; set; } = null;


        /// <summary>
        /// <para>Referent Location Field</para>
        /// <para>The From referent location field.</para>
        /// <para>“从参照位置”字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Referent Location Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _from_referent_location_field { get; set; } = null;


        /// <summary>
        /// <para>Referent Offset Field</para>
        /// <para>The From referent offset field.</para>
        /// <para>“从参照偏移”字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Referent Offset Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _from_referent_offset_field { get; set; } = null;


        /// <summary>
        /// <para>To Referent Method Field</para>
        /// <para>The To referent method field.</para>
        /// <para>“To referent 方法”字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Referent Method Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_referent_method_field { get; set; } = null;


        /// <summary>
        /// <para>To Referent Location Field</para>
        /// <para>The To referent location field.</para>
        /// <para>“收件人”指称位置字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Referent Location Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_referent_location_field { get; set; } = null;


        /// <summary>
        /// <para>To Referent Offset Field</para>
        /// <para>The To referent offset field.</para>
        /// <para>“收件人”（To） 指涉偏移量 （To referent Offset） 字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Referent Offset Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_referent_offset_field { get; set; } = null;


        /// <summary>
        /// <para>Offset Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the offset units to be used. The default is feet.</para>
        ///   <bulletList>
        ///     <bullet_item>Centimeters—Centimeters is the offset unit.</bullet_item><para/>
        ///     <bullet_item>Decimeters—Decimeters is the offset unit.</bullet_item><para/>
        ///     <bullet_item>Feet—Feet is the offset unit.</bullet_item><para/>
        ///     <bullet_item>Inches—Inches is the offset unit.</bullet_item><para/>
        ///     <bullet_item>Kilometers—Kilometers is the offset unit.</bullet_item><para/>
        ///     <bullet_item>Meters—Meters is the offset unit.</bullet_item><para/>
        ///     <bullet_item>Miles—Miles is the offset unit.</bullet_item><para/>
        ///     <bullet_item>Millimeters—Millimeters is the offset unit.</bullet_item><para/>
        ///     <bullet_item>Yards—Yards is the offset unit.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定要使用的偏移单位。默认值为英尺。</para>
        ///   <bulletList>
        ///     <bullet_item>厘米 - 厘米是偏移单位。</bullet_item><para/>
        ///     <bullet_item>分米 - 分米是偏移单位。</bullet_item><para/>
        ///     <bullet_item>英尺 （Feet） - 英尺是偏移单位。</bullet_item><para/>
        ///     <bullet_item>英寸 - 英寸是偏移单位。</bullet_item><para/>
        ///     <bullet_item>千米 - 千米是偏移单位。</bullet_item><para/>
        ///     <bullet_item>米 - 米是偏移单位。</bullet_item><para/>
        ///     <bullet_item>英里 - 英里是偏移单位。</bullet_item><para/>
        ///     <bullet_item>毫米 - 毫米是偏移单位。</bullet_item><para/>
        ///     <bullet_item>码 - 码是偏移单位。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Offset Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _offset_units_value? _offset_units { get; set; } = null;

        public enum _offset_units_value
        {
            /// <summary>
            /// <para>Inches</para>
            /// <para>Inches—Inches is the offset unit.</para>
            /// <para>英寸 - 英寸是偏移单位。</para>
            /// </summary>
            [Description("Inches")]
            [GPEnumValue("INCHES")]
            _INCHES,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—Feet is the offset unit.</para>
            /// <para>英尺 （Feet） - 英尺是偏移单位。</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("FEET")]
            _FEET,

            /// <summary>
            /// <para>Yards</para>
            /// <para>Yards—Yards is the offset unit.</para>
            /// <para>码 - 码是偏移单位。</para>
            /// </summary>
            [Description("Yards")]
            [GPEnumValue("YARDS")]
            _YARDS,

            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—Miles is the offset unit.</para>
            /// <para>英里 - 英里是偏移单位。</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("MILES")]
            _MILES,

            /// <summary>
            /// <para>Millimeters</para>
            /// <para>Millimeters—Millimeters is the offset unit.</para>
            /// <para>毫米 - 毫米是偏移单位。</para>
            /// </summary>
            [Description("Millimeters")]
            [GPEnumValue("MILLIMETERS")]
            _MILLIMETERS,

            /// <summary>
            /// <para>Centimeters</para>
            /// <para>Centimeters—Centimeters is the offset unit.</para>
            /// <para>厘米 - 厘米是偏移单位。</para>
            /// </summary>
            [Description("Centimeters")]
            [GPEnumValue("CENTIMETERS")]
            _CENTIMETERS,

            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—Meters is the offset unit.</para>
            /// <para>米 - 米是偏移单位。</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("METERS")]
            _METERS,

            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—Kilometers is the offset unit.</para>
            /// <para>千米 - 千米是偏移单位。</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("KILOMETERS")]
            _KILOMETERS,

            /// <summary>
            /// <para>Decimeters</para>
            /// <para>Decimeters—Decimeters is the offset unit.</para>
            /// <para>分米 - 分米是偏移单位。</para>
            /// </summary>
            [Description("Decimeters")]
            [GPEnumValue("DECIMETERS")]
            _DECIMETERS,

        }

        /// <summary>
        /// <para>Output Event Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Event Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_class { get; set; }


        public EnableReferentFields SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}